<?xml version='1.0'?>

<gl_extension name="GL_ARB_separate_shader_objects" reg_no="97">
	<tokens>
		<token name="GL_VERTEX_SHADER_BIT" value="0x00000001"/>
		<token name="GL_FRAGMENT_SHADER_BIT" value="0x00000002"/>
		<token name="GL_GEOMETRY_SHADER_BIT" value="0x00000004"/>
		<token name="GL_TESS_CONTROL_SHADER_BIT" value="0x00000008"/>
		<token name="GL_TESS_EVALUATION_SHADER_BIT" value="0x00000010"/>
		<token name="GL_ALL_SHADER_BITS" value="0xFFFFFFFF"/>
		<token name="GL_PROGRAM_SEPARABLE" value="0x8258"/>
		<token name="GL_ACTIVE_PROGRAM" value="0x8259"/>
		<token name="GL_PROGRAM_PIPELINE_BINDING" value="0x825A"/>
	</tokens>

	<functions>
		<function name="glUseProgramStages" return="void">
			<params>
				<param type="GLuint" name="pipeline"/>
				<param type="GLbitfield" name="stages"/>
				<param type="GLuint" name="program"/>
			</params>
		</function>
		<function name="glActiveShaderProgram" return="void">
			<params>
				<param type="GLuint" name="pipeline"/>
				<param type="GLuint" name="program"/>
			</params>
		</function>
		<function name="glCreateShaderProgramv" return="GLuint">
			<params>
				<param type="GLenum" name="type"/>
				<param type="GLsizei" name="count"/>
				<param type="const GLchar**" name="strings"/>
			</params>
		</function>
		<function name="glBindProgramPipeline" return="void">
			<params>
				<param type="GLuint" name="pipeline"/>
			</params>
		</function>
		<function name="glDeleteProgramPipelines" return="void">
			<params>
				<param type="GLsizei" name="n"/>
				<param type="const GLuint*" name="pipelines"/>
			</params>
		</function>
		<function name="glGenProgramPipelines" return="void">
			<params>
				<param type="GLsizei" name="n"/>
				<param type="GLuint*" name="pipelines"/>
			</params>
		</function>
		<function name="glIsProgramPipeline" return="GLboolean">
			<params>
				<param type="GLuint" name="pipeline"/>
			</params>
		</function>
		<function name="glGetProgramPipelineiv" return="void">
			<params>
				<param type="GLuint" name="pipeline"/>
				<param type="GLenum" name="pname"/>
				<param type="GLint*" name="params"/>
			</params>
		</function>
		<function name="glProgramUniform1i" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLint" name="v0"/>
			</params>
		</function>
		<function name="glProgramUniform1iv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="const GLint*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniform1f" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLfloat" name="v0"/>
			</params>
		</function>
		<function name="glProgramUniform1fv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="const GLfloat*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniform1d" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLdouble" name="v0"/>
			</params>
		</function>
		<function name="glProgramUniform1dv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="const GLdouble*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniform1ui" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLuint" name="v0"/>
			</params>
		</function>
		<function name="glProgramUniform1uiv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="const GLuint*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniform2i" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLint" name="v0"/>
				<param type="GLint" name="v1"/>
			</params>
		</function>
		<function name="glProgramUniform2iv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="const GLint*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniform2f" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLfloat" name="v0"/>
				<param type="GLfloat" name="v1"/>
			</params>
		</function>
		<function name="glProgramUniform2fv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="const GLfloat*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniform2d" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLdouble" name="v0"/>
				<param type="GLdouble" name="v1"/>
			</params>
		</function>
		<function name="glProgramUniform2dv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="const GLdouble*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniform2ui" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLuint" name="v0"/>
				<param type="GLuint" name="v1"/>
			</params>
		</function>
		<function name="glProgramUniform2uiv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="const GLuint*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniform3i" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLint" name="v0"/>
				<param type="GLint" name="v1"/>
				<param type="GLint" name="v2"/>
			</params>
		</function>
		<function name="glProgramUniform3iv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="const GLint*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniform3f" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLfloat" name="v0"/>
				<param type="GLfloat" name="v1"/>
				<param type="GLfloat" name="v2"/>
			</params>
		</function>
		<function name="glProgramUniform3fv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="const GLfloat*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniform3d" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLdouble" name="v0"/>
				<param type="GLdouble" name="v1"/>
				<param type="GLdouble" name="v2"/>
			</params>
		</function>
		<function name="glProgramUniform3dv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="const GLdouble*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniform3ui" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLuint" name="v0"/>
				<param type="GLuint" name="v1"/>
				<param type="GLuint" name="v2"/>
			</params>
		</function>
		<function name="glProgramUniform3uiv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="const GLuint*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniform4i" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLint" name="v0"/>
				<param type="GLint" name="v1"/>
				<param type="GLint" name="v2"/>
				<param type="GLint" name="v3"/>
			</params>
		</function>
		<function name="glProgramUniform4iv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="const GLint*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniform4f" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLfloat" name="v0"/>
				<param type="GLfloat" name="v1"/>
				<param type="GLfloat" name="v2"/>
				<param type="GLfloat" name="v3"/>
			</params>
		</function>
		<function name="glProgramUniform4fv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="const GLfloat*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniform4d" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLdouble" name="v0"/>
				<param type="GLdouble" name="v1"/>
				<param type="GLdouble" name="v2"/>
				<param type="GLdouble" name="v3"/>
			</params>
		</function>
		<function name="glProgramUniform4dv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="const GLdouble*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniform4ui" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLuint" name="v0"/>
				<param type="GLuint" name="v1"/>
				<param type="GLuint" name="v2"/>
				<param type="GLuint" name="v3"/>
			</params>
		</function>
		<function name="glProgramUniform4uiv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="const GLuint*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniformMatrix2fv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="GLboolean" name="transpose"/>
				<param type="const GLfloat*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniformMatrix3fv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="GLboolean" name="transpose"/>
				<param type="const GLfloat*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniformMatrix4fv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="GLboolean" name="transpose"/>
				<param type="const GLfloat*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniformMatrix2dv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="GLboolean" name="transpose"/>
				<param type="const GLdouble*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniformMatrix3dv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="GLboolean" name="transpose"/>
				<param type="const GLdouble*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniformMatrix4dv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="GLboolean" name="transpose"/>
				<param type="const GLdouble*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniformMatrix2x3fv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="GLboolean" name="transpose"/>
				<param type="const GLfloat*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniformMatrix3x2fv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="GLboolean" name="transpose"/>
				<param type="const GLfloat*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniformMatrix2x4fv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="GLboolean" name="transpose"/>
				<param type="const GLfloat*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniformMatrix4x2fv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="GLboolean" name="transpose"/>
				<param type="const GLfloat*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniformMatrix3x4fv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="GLboolean" name="transpose"/>
				<param type="const GLfloat*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniformMatrix4x3fv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="GLboolean" name="transpose"/>
				<param type="const GLfloat*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniformMatrix2x3dv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="GLboolean" name="transpose"/>
				<param type="const GLdouble*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniformMatrix3x2dv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="GLboolean" name="transpose"/>
				<param type="const GLdouble*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniformMatrix2x4dv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="GLboolean" name="transpose"/>
				<param type="const GLdouble*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniformMatrix4x2dv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="GLboolean" name="transpose"/>
				<param type="const GLdouble*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniformMatrix3x4dv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="GLboolean" name="transpose"/>
				<param type="const GLdouble*" name="value"/>
			</params>
		</function>
		<function name="glProgramUniformMatrix4x3dv" return="void">
			<params>
				<param type="GLuint" name="program"/>
				<param type="GLint" name="location"/>
				<param type="GLsizei" name="count"/>
				<param type="GLboolean" name="transpose"/>
				<param type="const GLdouble*" name="value"/>
			</params>
		</function>
		<function name="glValidateProgramPipeline" return="void">
			<params>
				<param type="GLuint" name="pipeline"/>
			</params>
		</function>
		<function name="glGetProgramPipelineInfoLog" return="void">
			<params>
				<param type="GLuint" name="pipeline"/>
				<param type="GLsizei" name="bufSize"/>
				<param type="GLsizei*" name="length"/>
				<param type="GLchar*" name="infoLog"/>
			</params>
		</function>
	</functions>
</gl_extension>
